package com.hnucm.cooklife.model;

import android.annotation.SuppressLint;

import com.hnucm.cooklife.base.BaseModel;
import com.hnucm.cooklife.bean.db.ClasSec;
import com.hnucm.cooklife.bean.home.ClassData;
import com.hnucm.cooklife.contract.clas.Contract;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import io.reactivex.Observable;

public class ClasModel extends BaseModel implements Contract.IClasModel {
    @SuppressLint("CheckResult")
    @Override
    public Observable<List<ClasSec>> loadClas() {
//        List<String> catogoryList = new ArrayList<>();
//
//        mApiServer.loadClas().map(classData -> {
//            classData.getData().stream().forEach(dataDTO -> {
//                String clacato = dataDTO.getClacato();
//                catogoryList.add(clacato);
//            });
//            return catogoryList;
//        });
//
//        List<String> strings = catogoryList.stream().distinct().collect(Collectors.toList());
//        List<ClasSec> clasSecList = new ArrayList<>();
//        int size = strings.size();
//
//
//        Observable<List<ClasSec>> map = new Observable<List<ClasSec>>() {
//            @Override
//            protected void subscribeActual(Observer<? super List<ClasSec>> observer) {
//
//            }
//        };
//         for (int i = 0; i < size; i++) {
//            ClasSec clasSec = new ClasSec(true, strings.get(i));
//            clasSecList.add(clasSec);
//
//             int finalI = i;
//             map = mApiServer.loadClas()
//                     .map(classData -> {
//                         classData.getData().stream().forEach(dataDTO -> {
//                             Clas clas = new Clas();
//                             clas.claid = dataDTO.getClaid();
//                             clas.claname = dataDTO.getClaname();
//                             clas.clacato = dataDTO.getClacato();
//                             clas.clapic = dataDTO.getClapic();
//                             if (clas.clacato.equals( strings.get(finalI))) {
//                                 ClasSec clasSec1 = new ClasSec(false, clas);
//                                 clasSecList.add(clasSec1);
//                             }
//                         });
//                         return clasSecList;
//                     });
//         }
//         return map;
//    }

        return mApiServer.loadClas()
                .map(classData -> {
                    List<ClasSec> clasSecList = new ArrayList<>();
                    int flag = 0;

                    List<ClassData.DataDTO> dtoList = classData.getData().stream().collect(Collectors.toList());
                    for (int i = 0; i < dtoList.size(); i++) {
                        if(flag != dtoList.get(i).getClasgroupId()){
                            flag = dtoList.get(i).getClasgroupId();
                            clasSecList.add(new ClasSec(true,dtoList.get(i).getClacato()));
                        }
                        clasSecList.add(new ClasSec(false,dtoList.get(i)));
                    }

//                    classData.getData().stream().forEach(dataDTO -> {
//
//                        Clas clas = new Clas();
//                        clas.claid = dataDTO.getClaid();
//                        clas.claname = dataDTO.getClaname();
//                        clas.clacato = dataDTO.getClacato();
//                        clas.clapic = dataDTO.getClapic();
//                        ClasSec clasSec = new ClasSec(false, clas);
//                        clasSecList.add(clasSec);
//
//                    });
                    return clasSecList;
                });
    }

    @Override
    public Observable<List<ClasSec>> refreshFoll() {
        return null;
    }
}
